package com.mall.service;

import com.mall.common.PageResult;
import com.mall.dto.UserLoginDTO;
import com.mall.dto.UserRegisterDTO;
import com.mall.entity.User;
import com.mall.vo.UserInfoVO;

import java.util.List;

/**
 * 用户服务接口
 * 
 * @author Mall Team
 */
public interface UserService {
    
    /**
     * 用户注册
     */
    void register(UserRegisterDTO registerDTO);
    
    /**
     * 用户登录
     */
    UserInfoVO.LoginVO login(UserLoginDTO loginDTO);
    
    /**
     * 根据ID获取用户信息
     */
    UserInfoVO getUserInfo(Long userId);
    
    /**
     * 更新用户信息
     */
    void updateUserInfo(Long userId, User user);
    
    /**
     * 修改密码
     */
    void changePassword(Long userId, String oldPassword, String newPassword);
    
    /**
     * 根据用户名获取用户
     */
    User getUserByUsername(String username);
    
    /**
     * 根据手机号获取用户
     */
    User getUserByPhone(String phone);
    
    /**
     * 检查用户名是否存在
     */
    boolean existsByUsername(String username);
    
    /**
     * 检查手机号是否存在
     */
    boolean existsByPhone(String phone);
    
    /**
     * 检查邮箱是否存在
     */
    boolean existsByEmail(String email);
    
    /**
     * 分页查询用户列表（管理员功能）
     */
    PageResult<UserInfoVO> getUserPage(Integer pageNum, Integer pageSize, 
                                      String keyword, Integer userType, Integer status);
    
    /**
     * 更新用户状态（管理员功能）
     */
    void updateUserStatus(Long userId, Integer status);
    
    /**
     * 删除用户（管理员功能）
     */
    void deleteUser(Long userId);

    /**
     * 管理端新增用户
     */
    void addUser(User user);

    /**
     * 管理端更新用户
     */
    void updateUserByAdmin(Long userId, User user);

    /**
     * 管理端根据ID获取用户
     */
    UserInfoVO getUserById(Long userId);

    /**
     * 管理端获取用户简单列表（不分页）
     */
    List<UserInfoVO> listUsers(Integer pageNum, Integer pageSize, String keyword);
    
    /**
     * 批量删除用户（管理员功能）
     */
    void deleteUsers(Long[] userIds);
    
    /**
     * 重置密码（管理员功能）
     */
    String resetPassword(Long userId);
}